package DataStorage;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import HibernateSQLite.java.model.InformationLigne;

import HibernateSQLite.java.util.HibernateUtil;

public class InformationLigneDAOHibernate extends
		GenericDAOHibernate<InformationLigne, Long, IInformationLigneDAO>
		implements IInformationLigneDAO {

	@SuppressWarnings("unchecked")
	public boolean isExist(String Organe, String Diversite, String Site,
			String N_ligne, String Annee) {
		try {
			List<InformationLigne> list = getSession()
					.createCriteria(InformationLigne.class)
					.add(Restrictions.eq("Organe", Organe))
					.add(Restrictions.eq("Diversite", Diversite))
					.add(Restrictions.eq("Site", Site))
					.add(Restrictions.eq("N_ligne", N_ligne))
					.add(Restrictions.eq("Annee", Annee)).list();

			if (!list.isEmpty()) {
				return true;
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}

		return false;
	}

	@SuppressWarnings("unchecked")
	public InformationLigne getInformationLigne(long InformationLigne_id) {
		try {
			List<InformationLigne> list = getSession()
					.createCriteria(InformationLigne.class)
					.add(Restrictions.eq("InformationLigne_id",
							InformationLigne_id)).list();

			for (InformationLigne i : list) {
				return i;
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public InformationLigne getInformationLigne(String Organe,
			String Diversite, String Site, String N_ligne, String Annee) {
		try {
			List<InformationLigne> list = getSession()
					.createCriteria(InformationLigne.class)
					.add(Restrictions.eq("Organe", Organe))
					.add(Restrictions.eq("Diversite", Diversite))
					.add(Restrictions.eq("Site", Site))
					.add(Restrictions.eq("N_ligne", N_ligne))
					.add(Restrictions.eq("Annee", Annee)).list();

			for (InformationLigne i : list) {
				return i;
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public long getInformationLigne_ID(String Organe, String Diversite,
			String Site, String N_ligne, String Annee) {
		try {
			List<InformationLigne> list = getSession()
					.createCriteria(InformationLigne.class)
					.add(Restrictions.eq("Organe", Organe))
					.add(Restrictions.eq("Diversite", Diversite))
					.add(Restrictions.eq("Site", Site))
					.add(Restrictions.eq("N_ligne", N_ligne))
					.add(Restrictions.eq("Annee", Annee)).list();

			for (InformationLigne infoLigne : list) {
				return infoLigne.getInformationLigne_id();
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}

		return (Long) null;
	}

	@SuppressWarnings("unchecked")
	public List<InformationLigne> getListInformationLigne() {
		try {
			List<InformationLigne> list = getSession().createCriteria(
					InformationLigne.class).list();
			return list;
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public List<InformationLigne> getListInformationLigne(String Organe) {
		try {
			Session session = getSession();

			List<InformationLigne> list = session
					.createCriteria(InformationLigne.class)
					.add(Restrictions.eq("Organe", Organe)).list();
			return list;
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public List<InformationLigne> getListInformationLigne(String Organe,
			String Diversite) {
		try {
			List<InformationLigne> list = getSession()
					.createCriteria(InformationLigne.class)
					.add(Restrictions.eq("Organe", Organe))
					.add(Restrictions.eq("Diversite", Diversite)).list();
			return list;
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return null;
	}

	@SuppressWarnings("unchecked")
	public List<InformationLigne> getListInformationLigne(String Organe,
			String Diversite, String Site) {
		try {
			List<InformationLigne> list = getSession()
					.createCriteria(InformationLigne.class)
					.add(Restrictions.eq("Organe", Organe))
					.add(Restrictions.eq("Diversite", Diversite))
					.add(Restrictions.eq("Site", Site)).list();
			return list;
		} catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
		return null;
	}

	public void saveInformationLigne(String Organe, String Diversite,
			String Site, String N_ligne, String Annee) {
		try{
			InformationLigne infor = new InformationLigne();
			infor.setOrgane(Organe);
			infor.setDiversite(Diversite);
			infor.setSite(Site);
			infor.setN_ligne(N_ligne);
			infor.setAnnee(Annee);
			getSession().save(infor);

			this.commit();
		}catch (HibernateException e) {
			e.printStackTrace();
		} finally {
			this.closeSession();
		}
	}

	// --------------------------------------------------------------------------------

	public void deleteRelatedInformationLigne(long InformationLigne_id) {

		CodageCheminDAOHibernate codageCheminDAO = new CodageCheminDAOHibernate();
		codageCheminDAO.deleteCodageChemin(InformationLigne_id);

		CoupesDAOHibernate coupesDAO = new CoupesDAOHibernate();
		coupesDAO.deleteCoupes(InformationLigne_id);

		EchantillonDAOHibernate echantillonDAO = new EchantillonDAOHibernate();
		echantillonDAO.deleteEchantillons(InformationLigne_id);

		InfluenceDAOHibernate influenceDAO = new InfluenceDAOHibernate();
		influenceDAO.deleteInfluences(InformationLigne_id);

		RepertoireDAOHibernate repertoireDAO = new RepertoireDAOHibernate();
		repertoireDAO.deleteRepertoires(InformationLigne_id);

		TNC_ObjectifDAOHibernate tnc_ObjectifDAO = new TNC_ObjectifDAOHibernate();
		tnc_ObjectifDAO.deleteTNC_Objectifs(InformationLigne_id);

		this.deleteById(InformationLigne_id);

	}

	public void deleteRelatedInformationLigne(InformationLigne informationLigne) {
		long InformationLigne_id = informationLigne.getInformationLigne_id();
		deleteRelatedInformationLigne(InformationLigne_id);
	}

	public static void main(String[] args) {

		InformationLigneDAOHibernate info = new InformationLigneDAOHibernate();
		/*
		 * String Organe = "X61"; String Diversite = "8RD"; String Site =
		 * "Le Mans"; String N_ligne = "9"; String Annee = "2012";
		 * info.saveInformationLigne(Organe, Diversite, Site, N_ligne, Annee);
		 * for (InformationLigne i : info.getListInformationLigne()) {
		 * System.out.println(i.getOrgane());
		 * System.out.println(i.getDiversite());
		 * System.out.println(i.getSite()); System.out.println(i.getN_ligne());
		 * }
		 */
		long InformationLigne_id = 1;
		info.deleteRelatedInformationLigne(InformationLigne_id);
	}

}
